package me.lxqq.testcore.annotations;


import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;

/**
 * 对外声明的依赖的类型，如果某元素声明的依赖类型满足被注入方要求的依赖类型，则实例化此注解修饰的元素满足依赖注入的需求。
 * <p>
 * 例如：有EGG类声明依赖类型为{"egg"},有方法eat(@DependencyType({"egg"}))声明入参依赖的类型为egg,
 * 就可以自动使用Egg类的实例作为入参调用eat()方法。
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(value = {CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})
public @interface DependencyType {
    /**
     * @return 依赖的类型，按照被注入方的要求，匹配全部元素或选择性的匹配部分元素
     */
    String[] tagType();
}
